package com.msb.userclient.client;

import com.alibaba.fastjson2.JSONObject;
import com.msb.user.api.UserApi;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * fallback属性指定一个降级的类
 * @author DreamAndLove
 * @date 2024/09/05 16:27
 * @description
 */
// 降级方式一
//@FeignClient(name = "user-provider", fallback = UserClientFallback.class)
@FeignClient(name = "user-provider", fallbackFactory = UserClientFallbackFactory.class)
public interface UserClient extends UserApi{
    /**
     * 功能:利用feign框架调用远程方法
     * <p>这里有个坑：如果被继承的UserApi的头部加了@RequestMapping("/XXX")
     *  那么如果UserClient以前指定访问的远程的Controller类上面也要加上一样的 @RequestMapping("/XXX")
     *  以下面这个方法路径为例，由于UserApi这个接口加了@RequestMapping("/user")
     *  那么使用userClient.getUser()出现的路径就是http://user-provider/user/user,因此
     *  要在user-provider项目里之前写好的 UserProviderController类上也要加上该注解，
     *  否则路径对不上，访问就会报404
     * </p>
     * @author DreamAndLove
     * @return JSONObject
     * @date 2024/9/5 19:26
     */
    @GetMapping("/user")
    JSONObject getUser();

    @GetMapping("/timeoutTest")
    String timeoutTest();
}
